package listados;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;

import accesoADatos.AccesoADatos;

import com.toedter.calendar.JDateChooser;

import datos.Profesional;
import datos.Servicio;

public class ListadoCantidadServicios extends ListadoDialog {

	private JLabel lProfesional;
	private JComboBox cbProfesional;
	private JLabel lFechaInicio;
	private JDateChooser cFechaInicio;
	private JLabel lServicio;
	private JComboBox cbServicio;
	private JDateChooser cFechaFin;
	private JLabel lFechaFin;

	public ListadoCantidadServicios(JFrame frame, Vector v) {
		super(frame, v);
		this.setTitle("Cantidad de Servicios Realizados");
		{
			lProfesional = new JLabel();
			super.jPanel1.add(lProfesional);
			lProfesional.setText("Profesional");
			lProfesional.setHorizontalAlignment(SwingConstants.CENTER);
			lProfesional.setPreferredSize(new java.awt.Dimension(100,21));
			lProfesional.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			lProfesional.setSize(100, 21);
			lProfesional.setForeground(new Color(0,0,0));
		}
		{
			List lp = AccesoADatos.getInstance().getProfesionalesTodos();
			lp.add(0, new String("Todos"));
			ComboBoxModel cbProfesionalModel = 
				new DefaultComboBoxModel(
						lp.toArray());
			cbProfesional = new JComboBox();
			cbProfesional.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			super.jPanel1.add(cbProfesional);
			cbProfesional.setModel(cbProfesionalModel);
			cbProfesional.setPreferredSize(new java.awt.Dimension(128, 21));
		}
		{
			lFechaInicio = new JLabel();
			super.jPanel1.add(lFechaInicio);
			lFechaInicio.setText("Fecha inicio");
			lFechaInicio.setHorizontalAlignment(SwingConstants.CENTER);
			lFechaInicio.setPreferredSize(new java.awt.Dimension(100,21));
			lFechaInicio.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			lFechaInicio.setSize(100, 21);
			lFechaInicio.setForeground(new Color(0,0,0));
		}
		{
			cFechaInicio = new JDateChooser();
			cFechaInicio.setDate(new Date());
			cFechaInicio.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			super.jPanel1.add(cFechaInicio);
			cFechaInicio.setPreferredSize(new java.awt.Dimension(130, 21));
		}
		{
			lServicio = new JLabel();
			super.jPanel1.add(lServicio);
			lServicio.setText("Servicio");
			lServicio.setHorizontalAlignment(SwingConstants.CENTER);
			lServicio.setPreferredSize(new java.awt.Dimension(100,21));
			lServicio.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			lServicio.setSize(100, 21);
			lServicio.setForeground(new Color(0,0,0));
		}
		{
			List ls = AccesoADatos.getInstance().getServicios();
			ls.add(0, new String("Todos"));
			ComboBoxModel cbServicioModel = 
				new DefaultComboBoxModel(
						ls.toArray());
			cbServicio = new JComboBox();
			super.jPanel1.add(cbServicio);
			cbServicio.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			cbServicio.setModel(cbServicioModel);
			cbServicio.setPreferredSize(new java.awt.Dimension(130, 21));
		}
		{
			lFechaFin = new JLabel();
			super.jPanel1.add(lFechaFin);
			lFechaFin.setText("Fecha fin");
			lFechaFin.setHorizontalAlignment(SwingConstants.CENTER);
			lFechaFin.setPreferredSize(new java.awt.Dimension(100,21));
			lFechaFin.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			lFechaFin.setSize(100, 21);
			lFechaFin.setForeground(new Color(0,0,0));
		}
		{
			cFechaFin = new JDateChooser();
			cFechaFin.setDate(new Date());
			cFechaFin.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			super.jPanel1.add(cFechaFin);
			cFechaFin.setPreferredSize(new java.awt.Dimension(130, 21));
		}
		{
			this.paneListados1.getJTable1().getColumnModel().getColumn(0).setPreferredWidth(150);
			this.paneListados1.getJTable1().getColumnModel().getColumn(1).setPreferredWidth(300);
		}
			pack();
			this.setLocationRelativeTo(null);
			this.setVisible(true);
	}

	@Override
	public Vector cargarVector(Object object) {
		Vector v = new Vector();
		
		return v;
	}
	
	protected void jButton1ActionPerformed(ActionEvent evt) {
		this.paneListados1.borrarTabla();
		List l = getLista();
		for (int i=0;i<l.size(); i++){
			/*Vector v=cargarVector(l.get(i));
			((DefaultTableModel) (this.paneListados1.getJTable1().getModel())).addRow(v);*/
			Vector v = (Vector) l.get(i);
			String p = (String)((Vector)l.get(i)).get(0);
			String s = (String)((Vector)l.get(i)).get(1);
			String prof = this.cbProfesional.getSelectedItem().toString();
			String serv = this.cbServicio.getSelectedItem().toString();
			if (((prof.equals("Todos")) || (p.equals(this.cbProfesional.getSelectedItem().toString()))) && ((serv.equals("Todos")) || (s.equals(this.cbServicio.getSelectedItem().toString())))){
				((DefaultTableModel) (this.paneListados1.getJTable1().getModel())).addRow(v);
			}
		}
		this.paneListados1.getJTable1().setPreferredSize(new Dimension(this.paneListados1.getJTable1().getWidth(),this.paneListados1.getJTable1().getRowCount()*this.paneListados1.getJTable1().getRowHeight(0)));
		AccesoADatos.getInstance().getSession().close();
	}

	@Override
	public List getLista() {
		List result = new ArrayList();
		Date inicio = this.cFechaInicio.getDate();
		Date fin = this.cFechaFin.getDate();
		List servicios = AccesoADatos.getInstance().getServicios();
		List prof = AccesoADatos.getInstance().getProfesionales();
		Vector v;
		for(int i=0; i<servicios.size(); i++){
			for(int j=0; j<prof.size(); j++){
				v = new Vector();
				Profesional p = (Profesional)prof.get(j); 
				Servicio s = (Servicio)servicios.get(i);
				v.add(p.toString());
				v.add(s.toString());
				int cant = AccesoADatos.getInstance().getCantidadServicios(p.getIdProfesional(), s, inicio, fin);
				v.add(new Integer(cant));
				result.add(v);
			}
		}
		return result; 
	}
	
	private Criterio getCriterio() {
		String profesional=this.cbProfesional.getSelectedItem().toString();
		String servicio=this.cbServicio.getSelectedItem().toString();
		Criterio c1=new CriterioServicioPRS(servicio);
		Criterio c2=new CriterioProfesionalServ(profesional);
		Criterio c3=new CriterioCompuesto(c1, c2);
		return c3;
	}

}
